/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	FilterServiceImpl.java
 * 模块说明：	
 * 修改历史：
 * Dec 11, 2007 - lxm - 创建。
 */
package com.hd123.rumba.gwt.cpnts.filter.server;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.gwt.base.client.exception.ClientBizException;
import com.hd123.rumba.gwt.base.client.util.ObjectUtil;
import com.hd123.rumba.gwt.base.server.RBRemoteServiceServlet;
import com.hd123.rumba.gwt.cpnts.filter.client.FilterService;
import com.hd123.rumba.gwt.cpnts.filter.client.biz.ClassTypeInfo;
import com.hd123.rumba.gwt.cpnts.filter.client.biz.DataTypeEnum;
import com.hd123.rumba.gwt.cpnts.filter.client.biz.FieldInfo;
import com.hd123.rumba.gwt.cpnts.filter.server.biz.IBTypeInfoMgr;
import com.hd123.rumba.runtime.NamingMgr;

/**
 * @author lxm
 * 
 */
public class FilterServiceImpl extends RBRemoteServiceServlet implements FilterService {

  public ClassTypeInfo getClassTypeInfo(String className) throws ClientBizException {
    try {
      ObjectUtil.checkParameterNotNull(className, "className");
      return doGetClassTypeInfo(className);
    } catch (Exception e) {
      throw buildException("", e);
    }
  }

  private IBTypeInfoMgr typeInfoMgr;

  private IBTypeInfoMgr getTypeInfoMgr() throws BusinessException {
    if (typeInfoMgr == null)
      typeInfoMgr = (IBTypeInfoMgr) NamingMgr.getInstance().lookupMgr(IBTypeInfoMgr.class);
    return typeInfoMgr;
  }
  
  private ClassTypeInfo doGetClassTypeInfo(String className) throws BusinessException {
    ClassTypeInfo cti = getTypeInfoMgr().getClassTypeInfo(className);
    for (int i = 0; i < cti.getFields().size(); i++) {
      FieldInfo fi = (FieldInfo) cti.getFields().get(i);
      if (DataTypeEnum.Class.equals(fi.getTypeInfo().getDataType())
          && ((ClassTypeInfo) fi.getTypeInfo()).getIsServant().booleanValue()) {
        String cn2 = ((ClassTypeInfo) fi.getTypeInfo()).getClassName();
        fi.setTypeInfo(doGetClassTypeInfo(cn2));
      }
    }
    
    return cti;
  }

}
